// components/book/typeDropList/typeDropList.js
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    types: {
      type: Array,
      value: []
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    // 展开收齐状态的图标
    activeIcon: '/images/icon1.jpg',
    inactiveIcon: '/images/icon3.jpg',
    // 当前展开的 type 组索引
    curType: null,
    // 当前展开的 book 索引
    curBook: null
  },

  lifetimes : {
    attached () {
    }
  },

  /**
   * 组件的方法列表
   */
  methods: {
    // 控制 type 列表中 books 显示
    async handleTypeShow (e) {
      // 存储当前点击的下标
      let index = -1
      // 判断是否收起
      let isReroll = false
      // 事件对象数据
      const targetInfo = e.currentTarget.dataset.typeInfo
      // data 中的 types 数据
      const types = this.data.types
      // 遍历找到当前数据
      for (let i = 0; i < types.length; i++) {
        if (targetInfo.typeId === types[i].typeId) {
          if (types[i].isListShow) {
            isReroll = true
          }
          index = i
          break
        }
      }
      // 定位需要修改的局部数据
      const exact = `types[${index}].isListShow`
      // 用于更新的数据
      let updateData = {}
      // 如果是收起已经展开的项
      if (isReroll) {
        // 如果详情打开了，还要将展开的详情页收起来
        if (this.data.curBook !== null) {
          const curBookShow = `types[${index}].books[${this.data.curBook}].isBookShow`
          updateData = {
            curType: null,
            curBook: null,
            [exact]: false,
            [curBookShow]: false
          }
        } else {
          updateData = {
            curType: null,
            [exact]: false
          }
        }
      } else {
        // 等待防止重复操作
        wx.showLoading({
          title: '查找书籍中...',
          mask: true
        })
        const curType = this.data.curType
        // 如果未曾请求过，则发送请求获取该类型所有书目
        if (typeof this.data.types[index].books === 'undefined'){
          const books = await wx.cloud.callFunction({
            name: 'loadBooksByType',
            data: {
              type: this.data.types[index].typeId
            }
          })
          this.setData({
            [`types[${index}].books`]: books.result.data
          })
        }
        // 如果已经打开过一个 type
        if (curType !== null) {
          const current = `types[${curType}].isListShow`
          // 同时还打开了一个 book detail
          if (this.data.curBook !== null) {
            const curBookShow = `types[${this.data.curType}].books[${this.data.curBook}].isBookShow`
            updateData = {
              curType: index,
              curBook: null,
              [exact]: true,
              [current]: false,
              [curBookShow]: false
            }
          } else {
            updateData = {
              curType: index,
              [exact]: true,
              [current]: false
            }
          }
        } else {
          updateData = {
            curType: index,
            [exact]: true
          }
        }
        wx.hideLoading()
      }
      this.setData(updateData)
    },
    // 控制 books 的 detail 显示
    handleDetailShow (e) {
      let index = null
      let isReroll = false
      const bookInfo = e.currentTarget.dataset.bookInfo
      const curType = this.data.types[this.data.curType]
      // 获得当前书本所在数组的下标
      for (let i = 0; i < curType.books.length; i++) {
        if (bookInfo.bookId === curType.books[i].bookId) {
          if (curType.books[i].isBookShow) {
            isReroll = true
          }
          index = i
          break
        }
      }
      // 更改显示信息
      // 定位需要修改的局部数据
      const exact = `types[${this.data.curType}].books[${index}].isBookShow`
      // 用于更新的数据
      let updateData = {}
      if (isReroll) {
        updateData = {
          curBook: null,
          [exact]: false
        }
      } else {
        const curBook = this.data.curBook
        if (curBook !== null) {
          const current = `types[${this.data.curType}].books[${this.data.curBook}].isBookShow`
          updateData = {
            curBook: index,
            [exact]: true,
            [current]: false
          }
        } else {
          updateData = {
            curBook: index,
            [exact]: true
          }
        }
      }
      this.setData(updateData)
    },
    // 点击进入 书籍详情 页面
    handleForDetail (e) {
      const data = e.currentTarget.dataset.bookInfo
      const types = this.data.types
      wx.navigateTo({
        url: '/pages/bookDetail/bookDetail',
        event: {
          acceptData (data) {
            console.log(data)
          }
        },
        success (res) {
          res.eventChannel.emit('accepData', {
            data,
            operate: 'search',
            types
          })
        }
      })
    }
  }
})
